/*
 * Copyright © 2022-now 尛飛俠（Denvie） All rights reserved.
 */

package cn.denvie.sentinel.persistent.pull.file.ext;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

/**
 * StoreHandler。
 *
 * @author Denvie
 * @date 2022/4/10
 * @since 1.0.0
 */
public interface StoreHandler {
    /**
     * 流控规则文件名
     */
    String FLOW_RULE_PATH = "FlowRulePath";
    /**
     * 降级规则文件名
     */
    String DEGRADE_RULE_PATH = "DegradeRulePath";
    /**
     * 授权规则文件名
     */
    String AUTH_RULE_PATH = "AuthRulePath";
    /**
     * 系统规则文件名
     */
    String SYSTEM_RULE_PATH = "SystemRulePath";
    /**
     * 热点参数规则文件名
     */
    String HOT_PARAM_RULE = "HotParamRulePath";
    /**
     * 网关规则文件名
     */
    String GATEWAY_RULE = "GatewayRulePath";
    /**
     * 网关Api分组规则文件名
     */
    String API_DEFINITION_RULE = "ApiDefinitionRulePath";

    /**
     * 默认基础目录。
     *
     * @return File Dir
     */
    default String baseDir() {
        return System.getProperty("user.home")
                + File.separator + "sentinel"
                + File.separator + "rules";
    }

    /**
     * 存储目录。
     *
     * @return File Path
     */
    String storeDir();

    /**
     * 获取规则映射。
     *
     * @return Map<rule_key, rule_file_name>
     */
    default Map<String, String> rulesMap() {
        Map<String, String> map = new HashMap<>(8);
        map.put(FLOW_RULE_PATH, storeDir() + File.separator + "FlowRule.json");
        map.put(DEGRADE_RULE_PATH, storeDir() + File.separator + "DegradeRule.json");
        map.put(SYSTEM_RULE_PATH, storeDir() + File.separator + "SystemRule.json");
        map.put(AUTH_RULE_PATH, storeDir() + File.separator + "AuthRule.json");
        map.put(HOT_PARAM_RULE, storeDir() + File.separator + "HotParamRule.json");
        map.put(GATEWAY_RULE, storeDir() + File.separator + "GatewayRule.json");
        map.put(API_DEFINITION_RULE, storeDir() + File.separator + "ApiDefinitionRule.json");
        return map;
    }
}
